package com.shyroke.daydayzhuanweb.config;

import com.shyroke.daydayzhuansvc.util.PermissionAnnotation;
import com.shyroke.daydayzhuansvc.util.R;
import com.shyroke.daydayzhuansvc.util.UserUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * 类名 ：权限的切面类
 * 用法 ：
 * 创建人 ： shyroke
 * 时间：2018/12/18 10:38
 */
@Aspect
@Component
public class PermissionAspect {
//com.shyroke.daydayzhuan.util.PermissionAnnotation
    @Pointcut("@annotation(com.shyroke.daydayzhuansvc.util.PermissionAnnotation)")
    private void permisson(){

    }

    /**
     * 给添加PermissionAnnotation注解的方法校验权限，而不必每个方法内都判断权限
     * @param joinPoint
     * @param permissionAnnotation
     * @return
     * @throws Throwable
     */
    @Around("permisson()&&@annotation(permissionAnnotation)")
    public Object advice(ProceedingJoinPoint joinPoint, PermissionAnnotation permissionAnnotation) throws  Throwable {

        R r = R.ok("操作成功");

        String permissionName =permissionAnnotation.permissionName();

        if(StringUtils.isEmpty(permissionName)){
           r.setFlag(false);
           r.setMessage("权限名称不能为空");
           return r;
        }

        //校验当前登录用户是否有该权限
        boolean isPermission = UserUtils.isPermission(permissionName);

        if(!isPermission){
            r.setFlag(false);
            r.setMessage("没有此操作权限！");
            return r;
        }
        //执行删除操作
        r = (R) joinPoint.proceed();

        return r;

    }

}
